package com.集合.Map___;

import org.w3c.dom.Node;

import java.util.*;

@SuppressWarnings("all")
public class Map六个遍历方式 {
    public static void main(String[] args) {
        /**1.通过Set set = hashMap.keySet();拿到存放key的set集合,再通过key取出value；
         * 1.1  iterator迭代器方式遍历；
         * 1.2  增强for循环
         * 
         * 2.通过Collection values = hashMap.values();得到存放value 的 Collection集合，遍历value
         * 2.1  iterator迭代器方式遍历；
         * 2.2  增强for循环
         *
         *3.通过Set set1 = hashMap.entrySet();  得到存放Node对象的set集合，
         *  将entrySet中的对象取出并向下转型成Map.Entry用其特有的方法，即：getKey和getValue
         *
         *将entryset集合中的一个元素取出来，即：运行类型是Node；
         *把node给到Object，因为Object没有getKey方法，将他向下转型成Map.Entry，
         *因为Node类实现了MAp.Entry接口，可以用接口中的方法getKey和getvalue；
         * */

        Map hashMap = new HashMap();
        hashMap.put(null, null);
        hashMap.put(1, 1);
        hashMap.put(2, 2);
        hashMap.put(3, "hsp");
        
        //1.通过Set set = hashMap.keySet();拿到存放key的set集合,再通过key取出value；
        Set set = hashMap.keySet();
        //1.1  iterator迭代器方式遍历；
        System.out.println("----------第一次遍历：iterator-------------");
        Iterator iterator = set.iterator();
        while (iterator.hasNext()) {//下一个是否存在；
            Object key = iterator.next();//取出下一个key
            Object value = hashMap.get(key);//取出key对应的value；
            System.out.println(key+" = "+value);
        }
        
        //* 1.2  增强for循环 
        System.out.println("----------第二次遍历：增强for-------------");
        for (Object key : set) {
            Object value = hashMap.get(key);
            System.out.println(key+" = "+value);
        }


        // 2.通过Collection values = hashMap.values();得到存放value 的 Collection集合，遍历value
        Collection values = hashMap.values();
        System.out.println("----------第3次遍历：iterator-------------");
        Iterator iterator1 = values.iterator();
        while (iterator1.hasNext()) {
            Object value = iterator1.next();
            System.out.println(value);
        }

        System.out.println("----------第4次遍历：增强for-------------");
        for (Object value : values) {
            System.out.println(value);
        }








        //3.通过Set set1 = hashMap.entrySet();  得到存放Node对象的set集合，Map.Entry
        // 将entrySet中的对象取出把Object向下转型成Map.Entry用其方法，即：getKey和getValue
        Set entrySet = hashMap.entrySet();


        //将entryset集合中的一个元素取出来，即：运行类型是Node；
        //把node给到Object，因为Object没有getKey方法，将他向下转型成Map.Entry，
        //因为Node类实现了MAp.Entry接口，可以用接口中的方法getKey和getvalue；
        System.out.println("----------第5次遍历：iterator-------------");
        Iterator iterator2 = entrySet.iterator();
        while (iterator2.hasNext()) {
            Object node = iterator2.next();//得到Node对象,
            Map.Entry entry = (Map.Entry)node;//将Object向下转型成Map.Entry，用其方法；得到key和value；
            System.out.println(entry.getKey()+" = "+entry.getValue());
        }

        System.out.println("----------第6次遍历：增强for-------------");
        for (Object node : entrySet) {
            Map.Entry entry = (Map.Entry)node;
            System.out.println(entry.getKey()+" = "+entry.getValue());
        }


    }
}
